# 面向对象特点：继承、多态、封装
class Player(object):  # 父类
    numbers = 0  # 类属性
    levels = ['青铜', '白银', '黄金', '钻石', '王者']

    def __init__(self, name, age, city, level):  # 初始化函数（构造函数）
        self.name = name  # 实例属性
        self.age = age
        self.city = city
        if level not in Player.levels:
            raise Exception('段位设置错误！')
        else:
            self.level = level
        Player.numbers += 1

    def show(self):  # 实例的方法
        print('我是荣耀王者的第%d个玩家，我的名字是%s，我来自 %s，我的段位是%s' % (
            Player.numbers, self.name, self.city, self.level))


class VIP(Player):  # 子类

    # 构造函数重写
    def __init__(self, name, age, city, level, coin):
        # 调用父类的构造函数
        super().__init__(name, age, city, level)
        self.coin = coin

    # 实例方法重写
    def show(self):  # 实例的方法
        print(f'我是荣耀王者的第{Player.numbers}个玩家，我的名字是{self.name}，我来自{self.city}，'
              f'我的段位是{self.level}，我的余额是{self.coin}')


mia = VIP('mia', 24, '哈尔滨', '黄金', 100)
mia.show()
